#ifndef __APP_DATA_H_
#define __APP_DATA_H_
#include "Arduino.h"
#include "Audio/Audiooo.h"
#include "touch_id/touch_init.h"
// ESPNOW
#include <esp_now.h>
#include <WiFi.h>
#include"MSD.h"
#include <TFT_eSPI.h>
#include <TJpg_Decoder.h>
#include "keyboard/BleKeyboard.h"
// #define RTS 15 // MCU通知模块MCU是否准备好
// #define CTS 16 // 模块通知MCU模块是否准备好


#define RXD 18 // 接收
#define TXD 17 // 发射
extern TFT_eSPI tft;
extern TOUCH_ID fpm;
extern BleKeyboard bleKeyboard;
extern TaskHandle_t handleTasktft;
extern TaskHandle_t handleTaskMotor;
extern TaskHandle_t handleTaskKeyBoard;
extern TaskHandle_t handleTasktouch_id;
extern TaskHandle_t handleTaskAudio;
extern TaskHandle_t handleTasksky;

/**
 * @brief 串口通信初始化
 */
void seriall_begin();
uint8_t kb_data();
void Serial2print(String key, String txdata);

extern bool dial_or_lvgl;

/**
 * SmartLamp.cpp
 */

// SmartLamp 地址  e0:98:06:f8:5a:58
extern uint8_t SmartLamp_Address[];

enum
{
      LAMP_OFF,                // 关灯
      LAMP_CHANGE_COLORT_MODE, // 调色温模式
      LAMP_COMPUTER_MODE,      // 电脑模式
      LAMP_READ_MODE,          // 阅读模式
      LAMP_COZY_HOME_MODE,     // 温馨模式
      LAMP_CINEMA_MODE,        // 电影院模式
      LAMP_MUSIC_MODE,         // 音乐模式
      LAMP_RGB_MODE,           // 彩灯模式
      // // 渐变色
      // LAMP_OFF_GRAD = 10,           // 关灯
      // LAMP_CHANGE_COLORT_MODE_GRAD, // 调色温模式
      // LAMP_COMPUTER_MODE_GRAD,      // 电脑模式
      // LAMP_READ_MODE_GRAD,          // 阅读模式
      // LAMP_COZY_HOME_MODE_GRAD,     // 温馨模式

      SmartKB32_KEY,
      SmartKB32_KNOB,
};

/////////////////////////////////////////////////////////////
///@brief 智能键盘按键按下时改变台灯亮度或色温
/////////////////////////////////////////////////////////////
enum // SmartKB32_KEY状态
{
      lamp_null,
      lamp_brightness_lower, // 台灯亮度减
      lamp_brightness_add,   // 台灯亮度加
      lamp_colort_lower,     // 台灯色温减
      lamp_colort_add,       // 台灯色温加

      key_press,  // 键盘按键按下
      key_square, // 键盘按键抬起
};
void key_board_change_lamp_state(uint8_t lamp_state, uint8_t key_state); // 智能键盘按键按下时改变台灯亮度或色温
/////////////////////////////////////////////////////////////

typedef struct lamp_state_data // 用于发送/接收数据包到SmartLamp
{
      uint8_t lampdata1; // 台灯模式
      uint8_t lampdata2; // 台灯亮度,HSV_V
      uint8_t lampdata3; // 台灯色温,HSV_S
      uint8_t lampdata4; // 台灯定时,HSV_H,音量降噪
      uint8_t lampdata5; // 台灯设置,彩灯模式
} lamp_state_data;
extern lamp_state_data SmartLamp_data;

typedef struct SmartLamp_data_refresh // 用于存储接收SmartLamp的定时数据包
{
      uint8_t lamp_mode;  // 台灯模式
      uint8_t brightness; // 台灯亮度
      uint8_t colorT;     // 台灯色温
      uint8_t volume;     // 音量降噪
      uint8_t rgb_mode;   // 彩灯模式
      uint8_t lamp_hsv;   // 彩灯色值
      uint8_t delay_time; // 定时时长
      bool setting;       // 设置
} SmartLamp_data_refresh;
extern SmartLamp_data_refresh lampdata_refresh;
void tx_lampdata_to_SmartLamp(const char *leixin);

/**
 * DaskPower.cpp
 */
// USBPower 地址 80:64:6f:87:4e:af
extern uint8_t USBpower_Address[];

typedef struct USB_state_data // 用于发送/接收数据包到USBPower
{
      bool usbdata1; 
      bool usbdata2; 
      bool usbdata3;
      bool usbdata4; 
      bool usbdata5; 
} USB_state_data;
extern USB_state_data USB_power_data;

typedef struct USB_POWER_data_refresh // 用于存储接收USBPower的定时数据包
{
      bool USB_OUT1;
      bool USB_OUT2;
      bool USB_OUT3;
      bool USB_OUT4;
      bool oled; // 设置
} USB_POWER_data_refresh;
extern USB_POWER_data_refresh USBdata_refresh;
void tx_onedata_to_USB();

/**
 * app_data.cpp
 */
void espnowbegin();



#endif